﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Commander_Wars.Spieletools
Public Class ObjektKarteneditormenü
    Inherits ObjektFormMenü
    Enum FillModi
        None
        Rectancle
        Line
        Ellipse
    End Enum
    Public FillMode As FillModi
    Dim P1 As Point = New Point(-1, -1)
    Dim P2 As Point = New Point(-1, -1)

    Enum KEModi
        Nichts
        Landschaftplazieren
        Einheitplazieren
        Gebäudeplazieren
        Spezialgebäudeplazieren
        Einheitabziehen
        Minimap
        Box
        EinheitenWerteVerändern
        LandschaftVerändern
    End Enum
    Public KEModus As KEModi
    Public Karteneditor As ObjektKarteneditor = Nothing
    Dim LandschaftsIDÄndern As ChangeTileSetDirection = Nothing
    Public Sub New()
        MyBase.New(New ObjektButton() {}, Nothing, New ObjektNumericUpDown() {}, Nothing, New ObjektValueSchieber() {}, New ObjektMultiValue() {}, New ObjektCheckBox() {})
        If My.Settings.Verhältnis = Hauptmenü.Breitbild Then
            Objektverwalter.LoadHintergrund(My.Settings.Resourcenpfad + "Hintergründe\SpielHintergundGroß.png")
        Else
            Objektverwalter.LoadHintergrund(My.Settings.Resourcenpfad + "Hintergründe\SpielHintergund.png")
        End If
        Hauptmenü.Formmodus = Hauptmenü.Formmodi.Editor
        NeueKarte(20, 20, 3, Nothing)
        Objektverwalter.Spielfeld.Kartenname = "Karte"

        Dim Buttons() As ObjektButton = {New ObjektButton(0, 0, My.Settings.Resourcenpfad + "Objekte\Button.png", "Menü", New PointF()), New ObjektButton(0, 0, My.Settings.Resourcenpfad + "Objekte\Button.png", "Karte", New PointF()), New ObjektButton(0, 0, My.Settings.Resourcenpfad + "Objekte\Button.png", "Befehle", New PointF()), New ObjektButton(0, 0, My.Settings.Resourcenpfad + "Objekte\Button.png", "Füllen", New PointF())}
        Dim Funktionen() As String = {"Speichern Strg+S", "Speichern Unter Strg+U", "Laden Strg+L", "Karte aus Bild laden Strg+L+B", "Karte importieren", "AWS-Karte imporieren", "Karte exportieren", "Beenden Esc", "Neue Karte", "Karte verändern", "Horizontal Spiegeln", "Vertikal Spiegeln", "Farben Ändern", "Zufallskarte", "Zufallskarte See", "Spieler Zahl Optimieren", "Schlacht Wechsel Tab", "Abzug Strg+E", "Einheiten Werte Verändern Strg+V", "Landschaft Verändern Strg+C", "Keiner", "Ellipse", "Linie", "Rechteck"}
        Dim Anzahl() As Integer = {8, 8, 4, 4}
        Taskleiste = New ObjektTaskleiste(Buttons, Funktionen, Anzahl)
        SetMausBild()

    End Sub


    Public Overrides Sub SetMausBild()
        If Hauptmenü.Rechteck.Contains(ObjektMaus.XKoordinate, ObjektMaus.YKoordinate) Then
            If IsNothing(Taskleiste) Then
                SpielCursorBildFinden()
            Else
                If Taskleiste.Modus = ObjektTaskleiste.Modi.Ausgefahren Then
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Menü
                Else
                    SpielCursorBildFinden()
                End If
            End If
        Else
            ObjektMaus.Zustand = ObjektMaus.Zustände.Menü
        End If
    End Sub
    Public Sub SpielCursorBildFinden()
        Dim X As Integer = Hauptmenü.SpielfeldPunkt.X
        Dim Y As Integer = Hauptmenü.SpielfeldPunkt.Y
        If X >= 0 And Y >= 0 And X < Objektverwalter.Spielfeld.Breite And Y < Objektverwalter.Spielfeld.Höhe Then
            Select Case KEModus
                Case KEModi.Einheitabziehen
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Abzug
                Case KEModi.Einheitplazieren
                    If Objektverwalter.KannEinheitplaziertwerden(X, Y, Objektverwalter.AlleEinheiten(Karteneditor.AktuelleEinheit).Einheit.EinheitenID, ObjektSpielfeld.Wetterarten.Sonne) = False Then
                        ObjektMaus.Zustand = ObjektMaus.Zustände.NichtPlazierbar
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Normal
                    End If
                Case KEModi.Gebäudeplazieren

                    ObjektMaus.Zustand = ObjektMaus.Zustände.Normal

                Case KEModi.Landschaftplazieren

                    If Objektverwalter.KannLandschaftplaziertwerden(X, Y, Karteneditor.AktuelleLandschaft) = True Then
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Normal
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustände.NichtPlazierbar
                    End If
                Case KEModi.Nichts

                    ObjektMaus.Zustand = ObjektMaus.Zustände.Normal

                Case KEModi.Spezialgebäudeplazieren
                    If Objektverwalter.KannSpezialGebäudeplaziertwerden(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) = True Then
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Normal
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustände.NichtPlazierbar
                    End If
                Case KEModi.Box
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Menü

                Case KEModi.EinheitenWerteVerändern
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Angriff
                Case KEModi.LandschaftVerändern
                    If LandschaftsIDÄndern Is Nothing Then
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Angriff
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Menü
                    End If
            End Select
        Else
            Select Case KEModus
                Case KEModi.Box
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Menü
                Case KEModi.LandschaftVerändern
                    If LandschaftsIDÄndern Is Nothing Then
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Angriff
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustände.Menü
                    End If
                Case Else
                    ObjektMaus.Zustand = ObjektMaus.Zustände.Normal
            End Select
        End If
    End Sub
    Public Overrides Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        Select Case e.KeyCode
            Case Keys.Escape
                Hauptmenü.Ini(Hauptmenü.Formmodi.Hauptmenü)
            Case Keys.S
                If e.Control = True Then
                    SaveMap()
                End If
            Case My.Settings.SelectTaste
                If KEModus = KEModi.Minimap Then
                    Objektverwalter.Minimap = Nothing
                    KEModus = KEModi.Nichts
                Else
                    KEModus = KEModi.Minimap
                    Objektverwalter.Minimap = New ObjektMinimap(Objektverwalter.Spielfeld, Nothing)
                End If
            Case Keys.U
                If e.Control = True Then
                    CheckMap()
                    Hauptmenü.SpeichernUnterName()
                End If
            Case Keys.L
                If e.Control = True Then
                    Hauptmenü.KarteLadenEditor()
                End If
            Case Keys.E
                If e.Control = True Then
                    KEModus = KEModi.Einheitabziehen
                End If
            Case Keys.V
                If e.Control = True Then
                    KEModus = KEModi.EinheitenWerteVerändern
                End If
            Case Keys.C
                If e.Control = True Then
                    KEModus = KEModi.LandschaftVerändern
                End If
            Case My.Settings.Oben
                CursorVerschieben(0, -1)
            Case My.Settings.Unten
                CursorVerschieben(0, 1)
            Case My.Settings.Rechts
                CursorVerschieben(1, 0)
            Case My.Settings.Links
                CursorVerschieben(-1, 0)
            Case My.Settings.Bestätigen
                Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                MouseDown(sender, Maus)
            Case My.Settings.Abrechen
                Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Right, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                MouseDown(sender, Maus)
                MouseMove(sender, Maus)
            Case Keys.Tab
                SchlachtWechsel()
        End Select
    End Sub

    Public Overrides Sub Malen()
        MyBase.ObjekteMalen()
        Karteneditor.Malen()
        If LandschaftsIDÄndern IsNot Nothing Then
            If KEModus = KEModi.LandschaftVerändern Then
                LandschaftsIDÄndern.Malen()
            Else
                LandschaftsIDÄndern = Nothing
            End If
        End If
    End Sub

    Public Overrides Sub MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If KEModus = KEModi.Minimap Then
            KEModus = KEModi.Nichts
            Objektverwalter.Minimap = Nothing
        End If
        If Karteneditor.MouseDown(e, Objektverwalter.Menü) = False Then
            checkMouseDownObjekte(e.X, e.Y)
            If Taskleiste.Modus = ObjektTaskleiste.Modi.Keiner Then
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        Select Case FillMode
                            Case FillModi.None
                                Select Case KEModus
                                    Case KEModi.Einheitplazieren
                                        Objektverwalter.Einheitplazieren()
                                    Case KEModi.Landschaftplazieren
                                        Objektverwalter.Landschaftplazieren()
                                    Case KEModi.Gebäudeplazieren
                                        Objektverwalter.Gebäudeplazieren()
                                    Case KEModi.Einheitabziehen
                                        Objektverwalter.EinheitAbziehen(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)
                                    Case KEModi.EinheitenWerteVerändern
                                        EinheitenVeränderungsBoxErschaffen(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)
                                    Case KEModi.Spezialgebäudeplazieren
                                        Objektverwalter.SpezialGebäudePlazieren(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)
                                    Case KEModi.LandschaftVerändern
                                        If LandschaftsIDÄndern Is Nothing Then
                                            If Objektverwalter.Spielfeld.OnMap(Hauptmenü.SpielfeldPunkt) Then
                                                LandschaftsIDÄndern = New ChangeTileSetDirection(Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
                                            End If
                                        Else
                                            LandschaftsIDÄndern.MouseDown(e)
                                        End If
                                End Select
                            Case Else
                                SetPointAndFill()
                        End Select
                    Case MouseButtons.Middle
                        MouseDownMitte(e)
                    Case MouseButtons.Right
                        ChangeFillMode(FillModi.None)
                        Select Case KEModus
                            Case KEModi.LandschaftVerändern
                                If LandschaftsIDÄndern Is Nothing Then
                                    SelectField()
                                Else
                                    LandschaftsIDÄndern.MouseDown(e)
                                End If
                            Case Else
                                SelectField()
                        End Select
                End Select
            End If
        End If
    End Sub

    ''' <summary>
    ''' Nimmt das aktuelle Feld und wählt zu erst Einheit dann Gebäude zuletzt Landschaft aus!
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SelectField()
        Dim P As New Point(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)
        If Objektverwalter.Spielfeld.OnMap(P.X, P.Y) Then
            Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(P.X, P.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
            If E Is Nothing Then
                Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(P.X, P.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                If L.Gebäude Is Nothing Then
                    'Landschaft auswählen
                    Dim Z As Integer = -1
                    For I = 0 To Objektverwalter.LandschaftenBilder.Length - 1
                        If Objektverwalter.LandschaftenBilder(I).ID = L.LandschaftsID Then
                            Z = I
                            Exit For
                        End If
                    Next
                    If Z >= 0 Then
                        Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + 1, 10)
                        'Den Startindex setzen
                        Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHöhe + Karteneditor.StartIndexLandschaften
                        Dim Sindex As Integer = Karteneditor.StartIndexLandschaften
                        While Sindex >= Z
                            Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                        End While
                        If Sindex < 0 Then Sindex = 0
                        While Max <= Z
                            Max += Karteneditor.LandschaftenEinheiteninderBreite
                            Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                        End While
                        Z -= Sindex
                        Dim B As Integer
                        Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                        Karteneditor.CheckEditorModus(P1, Me)
                        Karteneditor.StartIndexLandschaften = Sindex
                        'Den Punkt berechnen
                        Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                        Dim Rest As Integer
                        Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                        StartPunkt.Y += Rest / 2
                        Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                        Dim X2 As Integer = Rest / 2
                        StartPunkt.X += Rest / 2
                        StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                        StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                        Karteneditor.CheckLandschaftenAuswahl(StartPunkt, Me)

                    End If
                Else
                    'Gebäude auswählen!
                    Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(L.Gebäude.Rechteck.X, L.Gebäude.Rechteck.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                    ChangeSpielerAuswahl(G.Spieler)
                    If G.Rechteck.Width > Hauptmenü.Feldbreite Then
                        'Ein Spezial Gebäude!
                        Dim Z As Integer = -1
                        For I = 0 To Objektverwalter.AlleGebäude.Length - 1
                            If Objektverwalter.AlleGebäude(I).GebäudeID = G.GebäudeID Then
                                Z = Objektverwalter.GebäudeTextur.GetSpezialIDAusAllgemeinerID(I, Karteneditor.MomenentanerSpieler)
                                Exit For
                            ElseIf Objektverwalter.AlleGebäude(I).SpezialGebäude Then
                                If Karteneditor.MomenentanerSpieler > 0 Then
                                    If Not Objektverwalter.AlleGebäude(I).NurNeutral Then
                                        Z += 1
                                    End If
                                Else
                                    Z += 1
                                End If
                            End If
                        Next
                        If Z >= 0 Then
                            Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + (Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length) * 3 + 1, 10)
                            Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHöhe + Karteneditor.StartIndexSpezialgebäude
                            Dim Sindex As Integer = Karteneditor.StartIndexSpezialgebäude
                            While Sindex >= Z
                                Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                            End While
                            If Sindex < 0 Then Sindex = 0
                            While Max <= Z
                                Max += Karteneditor.LandschaftenEinheiteninderBreite
                                Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                            End While
                            Z -= Sindex
                            Dim B As Integer
                            Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                            Karteneditor.CheckEditorModus(P1, Me)
                            Karteneditor.StartIndexSpezialgebäude = Sindex
                            Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                            Dim Rest As Integer
                            Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.Y += Rest / 2
                            Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                            Dim X2 As Integer = Rest / 2
                            StartPunkt.X += Rest / 2
                            StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                            StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                            Karteneditor.CheckSpezialGebäudeAuswahl(StartPunkt, Me)
                        End If
                    Else
                        'ein normales Gebäude
                        Dim Z As Integer = -1
                        For I = 0 To Objektverwalter.AlleGebäude.Length - 1
                            If Objektverwalter.AlleGebäude(I).GebäudeID = G.GebäudeID Then
                                Z = Objektverwalter.GebäudeTextur.GetNormaleIDAusAllgemeinerID(I, Karteneditor.MomenentanerSpieler)
                                Exit For
                            End If
                        Next
                        If Z >= 0 Then
                            Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + (Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length) * 2 + 1, 10)
                            Dim Max As Integer = Karteneditor.GebäudeinderBreite * Karteneditor.GebäudeinderHöhe + Karteneditor.StartIndexGebäude
                            Dim Sindex As Integer = Karteneditor.StartIndexGebäude
                            While Sindex >= Z
                                Sindex -= Karteneditor.GebäudeinderBreite
                            End While
                            If Sindex < 0 Then Sindex = 0
                            While Max <= Z
                                Max += Karteneditor.GebäudeinderBreite
                                Sindex += Karteneditor.GebäudeinderBreite
                            End While
                            Z -= Sindex

                            Dim B As Integer
                            Dim H As Integer = Math.DivRem(Z, Karteneditor.GebäudeinderBreite, B)
                            Karteneditor.CheckEditorModus(P1, Me)
                            Karteneditor.StartIndexGebäude = Sindex
                            Dim StartPunkt As Point
                            If Hauptmenü.ZoomedIn Then
                                StartPunkt = New Point(Karteneditor.RechteckEditor(3).X + 3, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 1 + Hauptmenü.Feldbreite)
                            Else
                                StartPunkt = New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                            End If

                            Dim Rest As Integer
                            Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.Y += Rest / 2
                            Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.X += Rest / 2

                            StartPunkt.X += (Hauptmenü.Feldbreite * 1.5 + 4) * B
                            StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H + ObjektKarteneditor.PlatzeinesButtons / 2

                            Karteneditor.CheckGebäudeAuswahl(StartPunkt, Me)
                        End If
                    End If
                End If
            Else
                'Einheit auswählen!
                Dim Z As Integer = -1
                For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                    If Objektverwalter.AlleEinheiten(I).EinheitenID = E.EinheitenID Then
                        Z = I
                        Exit For
                    End If
                Next
                If Z >= 0 Then
                    Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length + 1, 10)
                    Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHöhe + Karteneditor.StartIndexEinheiten
                    Dim Sindex As Integer = Karteneditor.StartIndexEinheiten
                    While Sindex >= Z
                        Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                    End While
                    If Sindex < 0 Then Sindex = 0
                    While Max <= Z
                        Max += Karteneditor.LandschaftenEinheiteninderBreite
                        Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                    End While
                    Z -= Sindex
                    Dim B As Integer
                    Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                    Karteneditor.CheckEditorModus(P1, Me)
                    Karteneditor.StartIndexEinheiten = Sindex
                    'Den Punkt berechnen
                    Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                    Dim Rest As Integer
                    Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                    StartPunkt.Y += Rest / 2
                    Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                    Dim X2 As Integer = Rest / 2
                    StartPunkt.X += Rest / 2
                    StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                    StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                    ChangeSpielerAuswahl(E.Spieler)
                    Karteneditor.CheckEinheitenAuswahl(StartPunkt, Me)


                End If
            End If
        End If
    End Sub

    Private Sub ChangeSpielerAuswahl(ByVal Spieler As Integer)
        Dim Rest As Integer = 0
        Dim AnzahldergemaltenSpieler As Integer = Math.DivRem((Karteneditor.RechteckEditor(2).Width - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesSpielerButtons, Rest)
        Karteneditor.StartSpieler = Spieler
        Karteneditor.MomenentanerSpieler = Spieler
        If Karteneditor.StartSpieler + AnzahldergemaltenSpieler > Objektverwalter.Spielfeld.Spieler.Length - 1 Then
            Karteneditor.StartSpieler = Objektverwalter.Spielfeld.Spieler.Length - AnzahldergemaltenSpieler - 1
        End If
        If Karteneditor.StartSpieler < 0 Then
            Karteneditor.StartSpieler = 0
        End If
        Dim NTerSpieler As Integer = Spieler - Karteneditor.StartSpieler
        Dim Startpunkt As New Point(2 + Karteneditor.RechteckEditor(2).X + (Karteneditor.RechteckEditor(2).Width - ObjektKarteneditor.PlatzeinesSpielerButtons * Objektverwalter.Spielfeld.Spieler.Length) / 2, 108)
        If ObjektKarteneditor.PlatzeinesSpielerButtons * Objektverwalter.Spielfeld.Spieler.Length > Karteneditor.RechteckEditor(2).Width Then
            Startpunkt = New Point(Karteneditor.RechteckEditor(2).X + ObjektKarteneditor.Pfeilplatzgesamt / 2 + Rest / 2 + 1, 108)
        End If

        Startpunkt.X += Hauptmenü.Feldbreite * 2 * NTerSpieler
        Karteneditor.SpielerauswahlcheckKlick(Startpunkt)
    End Sub

    Public Overrides Sub MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Select Case e.Button
            Case Windows.Forms.MouseButtons.Left
                If Karteneditor.MouseDown(e, Objektverwalter.Menü) = False Then
                    If Taskleiste.Modus = ObjektTaskleiste.Modi.Keiner Then
                        Select Case KEModus
                            Case KEModi.Einheitplazieren
                                Objektverwalter.Einheitplazieren()
                            Case KEModi.Landschaftplazieren
                                Objektverwalter.Landschaftplazieren()
                            Case KEModi.Gebäudeplazieren
                                Objektverwalter.Gebäudeplazieren()
                            Case KEModi.Einheitabziehen
                                Objektverwalter.EinheitAbziehen(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)

                        End Select
                    End If
                End If
            Case Windows.Forms.MouseButtons.None
                Select Case KEModus
                    Case KEModi.LandschaftVerändern
                        If LandschaftsIDÄndern IsNot Nothing Then
                            LandschaftsIDÄndern.MouseMove(e)
                        End If
                    Case Else
                        MouseMoveObjekte(e.X, e.Y)
                End Select
        End Select
    End Sub

    Public Overrides Sub MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Karteneditor.MouseUp(e) = False Then
            Dim F As String = checkMouseUPObjekte(e.X, e.Y)
            If F = "" Then
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        If KEModus = KEModi.LandschaftVerändern Then
                            If LandschaftsIDÄndern IsNot Nothing Then
                                'einfach löschen!
                                Select Case LandschaftsIDÄndern.MouseUp(e).ToLower
                                    Case "abbrechen!"
                                        LandschaftsIDÄndern = Nothing
                                    Case "ändern"
                                        LandschaftsIDÄndern.CreateChanges()
                                        LandschaftsIDÄndern = Nothing
                                End Select
                            End If
                        Else
                            If Karteneditor.MouseUp(e) = False Then
                                Select Case KEModus
                                    Case KEModi.Landschaftplazieren
                                        Objektverwalter.ÜbergängeAktualiesieren()
                                    Case KEModi.Gebäudeplazieren
                                        Objektverwalter.ÜbergängeAktualiesieren()
                                End Select
                            End If
                        End If
                    Case MouseButtons.Middle
                            MouseUpMitte()
                End Select
            Else
                'Wir werten die Funktion aus
                Select Case F.ToLower
                    Case "beenden esc"
                        Hauptmenü.Ini(Hauptmenü.Formmodi.Hauptmenü)
                    Case "abzug strg+e"
                        KEModus = KEModi.Einheitabziehen
                    Case "speichern strg+s"
                        SaveMap
                    Case "speichern unter strg+u"
                        CheckMap()
                        Hauptmenü.SpeichernUnterName()
                    Case "laden strg+l"
                        Hauptmenü.KarteLadenEditor()
                    Case "karte importieren"
                        Hauptmenü.KarteLadenEditorausTXT()
                    Case "aws-karte imporieren"
                        Hauptmenü.KarteLadenEditorausAWSMap()
                    Case "karte exportieren"
                        Hauptmenü.KarteExportieren()
                    Case "neue karte"
                        KEModus = KEModi.Box
                        Dim X As Integer = Hauptmenü.MainMenü.MalPanel.Width / 2 - 150
                        Dim Y As Integer = Hauptmenü.MainMenü.MalPanel.Height / 2 - 72
                        Box = New ObjektBox(ObjektBox.Zustände.NurBefehle, New ObjektButton() {New ObjektButton(X + 10, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Neue Karte!", New PointF(0.5#, 0.5#)), New ObjektButton(X + 180, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Abbrechen!", New PointF(0.5#, 0.5#))}, New ObjektNumericUpDown() {New ObjektNumericUpDown(Objektverwalter.Spielfeld.Spieler.Length - 1, 2, 99, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 10), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Breite, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 30), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Höhe, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 50), 1, New PointF(0.5#, 0.5#))}, New ObjektStringUpDown() {}, New ObjektLabel() {New ObjektLabel(X + 15, Y + 10, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Spieler"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Breite"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 50, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Höhe"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#))}, New Rectangle(X, Y, 300, 145), 0)
                    Case "neue karte!"
                        NeueKarte(Box.NUDS(1).GetValue, Box.NUDS(2).GetValue, Box.NUDS(0).GetValue)
                        Box = Nothing
                        KEModus = KEModi.Nichts
                        Karteneditor.CursorRechteckesetzen()
                    Case "abbrechen!"
                        Box = Nothing
                        KEModus = KEModi.Nichts
                    Case "karte verändern"
                        KEModus = KEModi.Box
                        Dim X As Integer = Hauptmenü.MainMenü.MalPanel.Width / 2 - 150
                        Dim Y As Integer = Hauptmenü.MainMenü.MalPanel.Height / 2 - 72
                        Box = New ObjektBox(ObjektBox.Zustände.NurBefehle, New ObjektButton() {New ObjektButton(X + 10, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Karte verändern!", New PointF(0.5#, 0.5#)), New ObjektButton(X + 180, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Abbrechen!", New PointF(0.5#, 0.5#))}, New ObjektNumericUpDown() {New ObjektNumericUpDown(Objektverwalter.Spielfeld.Spieler.Length - 1, 2, 99, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 10), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Breite, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 30), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Höhe, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 50), 1, New PointF(0.5#, 0.5#))}, New ObjektStringUpDown() {}, New ObjektLabel() {New ObjektLabel(X + 15, Y + 10, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Spieler"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Breite"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 50, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Höhe"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#))}, New Rectangle(X, Y, 300, 145), 0)
                    Case "karte verändern!"
                        Karteverändern(Box.NUDS(1).GetValue, Box.NUDS(2).GetValue, Box.NUDS(0).GetValue)
                        Box = Nothing
                        KEModus = KEModi.Nichts
                        Karteneditor.CursorRechteckesetzen()
                    Case "karte aus bild laden strg+l+b"
                        Hauptmenü.KarteausBildLadenEditor()
                    Case "farbe ändern"
                        'KEModus = KEModi.Box
                        'Dim X As Integer = Hauptmenü.MainMenü.MalPanel.Width / 2 - 150
                        'Dim Y As Integer = Hauptmenü.MainMenü.MalPanel.Height / 2 - 72
                        'Box=
                    Case "zufallskarte see"
                        Objektverwalter.ZufallskarteV2(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Höhe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
                    Case "zufallskarte"
                        Objektverwalter.Zufallskarte(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Höhe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
                    Case "horizontal spiegeln"
                        Objektverwalter.HorizontalSpiegeln()
                    Case "vertikal spiegeln"
                        Objektverwalter.VertikalSpiegeln()
                    Case "einheiten werte verändern strg+v"
                        KEModus = KEModi.EinheitenWerteVerändern
                    Case "einheit verändern"
                        EinheitVerändern()
                    Case "schlacht wechsel tab"
                        SchlachtWechsel()
                    Case "landschaft verändern strg+c"
                        KEModus = KEModi.LandschaftVerändern
                    Case "spieler zahl optimieren"
                        OptimizePlayerNumber()
                    Case "keiner"
                        ChangeFillMode(FillModi.None)
                    Case "ellipse"
                        ChangeFillMode(FillModi.Ellipse)
                    Case "linie"
                        ChangeFillMode(FillModi.Line)
                    Case "rechteck"
                        ChangeFillMode(FillModi.Rectancle)
                End Select
            End If
        End If
    End Sub

    Private Sub MouseDownMitte(ByVal e As System.Windows.Forms.MouseEventArgs)
        Hauptmenü.Scrollen = True
        Hauptmenü.ScrollenX = e.X
        Hauptmenü.ScrollenY = e.Y
    End Sub

    Private Sub MouseUpMitte()
        Hauptmenü.Scrollen = False
    End Sub

    Public Overrides Sub Frame()
        MarkFields(P1, P2)
        Hauptmenü.SpielfeldScrollen()
    End Sub

    Public Overrides Sub MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Objektverwalter.Spielfeld.OnMap(Hauptmenü.SpielfeldPunkt) Then
            Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
            If L.BildIDFest Then
                If e.Delta > 0 Then
                    L.BildID += 1
                    If L.BildID >= Objektverwalter.LandschaftenBilder(L.ID).Texturen.Length Then
                        L.BildIDFest = False
                        L.ÜbergängeAktualisieren(L.KooX, L.KooY, Objektverwalter.Spielfeld)
                    End If
                Else
                    L.BildID -= 1
                    If L.BildID < 0 Then
                        L.BildIDFest = False
                        L.ÜbergängeAktualisieren(L.KooX, L.KooY, Objektverwalter.Spielfeld)
                    End If
                End If
            Else
                L.BildIDFest = True
                If e.Delta > 0 Then
                    L.BildID = 0
                Else
                    L.BildID = Objektverwalter.LandschaftenBilder(L.ID).Texturen.Length - 1
                End If
            End If
        End If
    End Sub

    ''' <summary>
    ''' Erstellt eine neue Karte für den Editor
    ''' </summary>
    ''' <param name="Breite"></param>
    ''' <param name="Höhe"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="Farbtabellen"></param>
    ''' <remarks></remarks>
    Public Sub NeueKarte(ByVal Breite As Integer, ByVal Höhe As Integer, ByVal Spieler As Integer, Optional ByVal Farbtabellen() As Color = Nothing)
        Dim neuSpieler() As ObjektSpieler = {New ObjektSpieler(0, Hauptmenü.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)}
        Dim AnzahlderArmeen As Integer = [Enum].GetNames(Armeen.AC.GetType).Length - 1
        For I = 0 To Spieler - 1
            Dim Farbe As Color
            Dim I2 As Integer = I
            If IsNothing(Farbtabellen) Then
                While I2 > Hauptmenü.AlleFarbtabellen.Length - 1
                    I2 -= Hauptmenü.AlleFarbtabellen.Length - 1
                End While
                Farbe = Hauptmenü.AlleFarbtabellen(I2)
            Else
                Farbe = Farbtabellen(I)
            End If
            Dim Armee As Armeen = 10
            I2 = I
            While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
            End While
            Armee = I2
            Dim Team As Objektverwalter.ABC
            I2 = I
            While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
            End While
            Team = I2
            Array.Resize(neuSpieler, neuSpieler.Length + 1)
            If I = 0 Then
                neuSpieler(neuSpieler.Length - 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
            Else
                neuSpieler(neuSpieler.Length - 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
            End If
        Next
        Objektverwalter.Spielfeld = Nothing
        Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Höhe, neuSpieler, New ObjektRegeln(False, neuSpieler.Length - 1, New ObjektRegeln.Siegbedingungen() {ObjektRegeln.Siegbedingungen.KeineHQs, ObjektRegeln.Siegbedingungen.KeineEinheiten}, True, New Integer() {70, 10, 10, 10}, , , , , , , ))
        Objektverwalter.Zentrieren()
    End Sub
    ''' <summary>
    ''' Erstellt eine neue Karte für den Editor
    ''' </summary>
    ''' <param name="Breite"></param>
    ''' <param name="Höhe"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="Farbtabellen"></param>
    ''' <remarks></remarks>
    Public Sub Karteverändern(ByVal Breite As Integer, ByVal Höhe As Integer, ByVal Spieler As Integer, Optional ByVal Farbtabellen() As Color = Nothing)
        Dim Spielfeld As ObjektSpielfeld = Objektverwalter.Spielfeld
        Dim neuSpieler() As ObjektSpieler = {New ObjektSpieler(0, Hauptmenü.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)}
        Dim AnzahlderArmeen As Integer = [Enum].GetNames(Armeen.AC.GetType).Length - 1
        For I = 0 To Spieler - 1
            Dim Farbe As Color
            Dim I2 As Integer = I
            If IsNothing(Farbtabellen) Then
                While I2 > Hauptmenü.AlleFarbtabellen.Length - 1
                    I2 -= Hauptmenü.AlleFarbtabellen.Length - 1
                End While
                Farbe = Hauptmenü.AlleFarbtabellen(I2)
            Else
                Farbe = Farbtabellen(I)
            End If
            Dim Armee As Armeen = 10
            I2 = I
            While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
            End While
            Armee = I2
            Dim Team As Objektverwalter.ABC
            I2 = I
            While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
            End While
            Team = I2
            Array.Resize(neuSpieler, neuSpieler.Length + 1)
            If Spieler < Objektverwalter.Spielfeld.Spieler.Length Then
                neuSpieler(I + 1) = Objektverwalter.Spielfeld.Spieler(I + 1)
            Else
                If Spieler = 1 Then
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                Else
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                End If
            End If
        Next
        Objektverwalter.Spielfeld = Nothing
        Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Höhe, neuSpieler, New ObjektRegeln(False, neuSpieler.Length - 1, New ObjektRegeln.Siegbedingungen() {ObjektRegeln.Siegbedingungen.KeineHQs, ObjektRegeln.Siegbedingungen.KeineEinheiten}, True, New Integer() {70, 10, 10, 10}, , , , , , ))
        Objektverwalter.Spielfeld.Autor = Spielfeld.Autor
        Objektverwalter.Spielfeld.Beschreibung = Spielfeld.Beschreibung
        Objektverwalter.Spielfeld.Kartenname = Spielfeld.Kartenname
        Objektverwalter.Zentrieren()
        For X = 0 To Objektverwalter.Spielfeld.Breite - 1
            For Y = 0 To Objektverwalter.Spielfeld.Höhe - 1
                If Y < Spielfeld.Höhe Then
                    If X < Spielfeld.Breite Then
                        Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                        Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                    End If
                End If
            Next
        Next
        For Y = 0 To Objektverwalter.Spielfeld.Höhe - 1
            For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                If IsNothing(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude) = False Then
                    If Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.X < Objektverwalter.Spielfeld.Breite And Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.Y < Objektverwalter.Spielfeld.Höhe Then
                        Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.X, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                        If G.Spieler < Objektverwalter.Spielfeld.Spieler.Length Then
                            If G.Rechteck.Width = Hauptmenü.Feldbreite And G.Rechteck.Height = Hauptmenü.Feldbreite * 2 Then
                            Else
                                If IsNothing(G) = False Then
                                    If Objektverwalter.KannSpezialGebäudeplaziertwerden(G.Rechteck.X, G.Rechteck.Y) = False Then
                                        Objektverwalter.GebäudeLöschen(Hauptmenü.Rechteck.X, Hauptmenü.Rechteck.Y)
                                    End If
                                Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude = Nothing
                                End If
                            End If
                        Else
                            Objektverwalter.GebäudeLöschen(G.Rechteck.X, G.Rechteck.Y)
                        End If
                    End If
                Else
                    Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude = Nothing
                End If
            Next
        Next
    End Sub

    Public Sub CursorVerschieben(ByVal XVeränderung As Integer, ByVal YVeränderung As Integer)
        MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Feld Wechsel.wav", False)
        Dim X As Integer = Hauptmenü.SpielfeldPunkt.X + XVeränderung
        Dim Y As Integer = Hauptmenü.SpielfeldPunkt.Y + YVeränderung
        X = X * Hauptmenü.Feldbreite : Y = Y * Hauptmenü.Feldbreite
        Hauptmenü.CursorPlazieren(X, Y)
    End Sub
    Public Overrides Sub IniMenü()
        Karteneditor = New ObjektKarteneditor()
    End Sub

    Public Overrides Sub SprachEingabe(ByVal Eingabe As String)
        Select Case Eingabe.ToLower
            Case "beenden"
                Hauptmenü.Ini(Hauptmenü.Formmodi.Hauptmenü)
            Case "abzug"
                KEModus = KEModi.Einheitabziehen
            Case "speichern"
                Dim Name As String = Objektverwalter.Spielfeld.Kartenname
                If Name = "" Then
                    Name = Hauptmenü.MainMenü.SpeichenUnter.FileName
                    If Name.LastIndexOf("\") >= 0 Then
                        Name = Name.Remove(0, Name.LastIndexOf("\") + 1)
                    End If
                    If Name.IndexOf(".") >= 0 Then
                        Name = Name.Remove(Name.IndexOf("."))
                    End If
                End If
                Hauptmenü.Speichern(Name)
            Case "speichern unter"
                Hauptmenü.SpeichernUnterName()
            Case "laden"
                Hauptmenü.KarteLadenEditor()
            Case "abbrechen"
                Box = Nothing
                KEModus = KEModi.Nichts
            Case "neue karte"
                KEModus = KEModi.Box
                Dim X As Integer = Hauptmenü.MainMenü.MalPanel.Width / 2 - 150
                Dim Y As Integer = Hauptmenü.MainMenü.MalPanel.Height / 2 - 72
                Box = New ObjektBox(ObjektBox.Zustände.NurBefehle, New ObjektButton() {New ObjektButton(X + 10, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Neue Karte!", New PointF(0.5#, 0.5#)), New ObjektButton(X + 180, Y + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Abbrechen!", New PointF(0.5#, 0.5#))}, New ObjektNumericUpDown() {New ObjektNumericUpDown(Objektverwalter.Spielfeld.Spieler.Length - 1, 2, 99, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 10), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Breite, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 30), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(Objektverwalter.Spielfeld.Höhe, 1, 9999, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X + 80, Y + 50), 1, New PointF(0.5#, 0.5#))}, New ObjektStringUpDown() {}, New ObjektLabel() {New ObjektLabel(X + 15, Y + 10, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Spieler"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Breite"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X + 15, Y + 50, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Höhe"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#))}, New Rectangle(X, Y, 300, 145), 0)
            Case "zufallskarte see"
                Objektverwalter.ZufallskarteSee(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Höhe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
            Case "zufallskarte"
                Objektverwalter.Zufallskarte(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Höhe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
            Case "horizontal spiegeln"
                Objektverwalter.HorizontalSpiegeln()
            Case "vertikal spiegeln"
                Objektverwalter.VertikalSpiegeln()
        End Select
    End Sub

    Public Sub EinheitenVeränderungsBoxErschaffen(ByVal X As Integer, ByVal Y As Integer)
        If Objektverwalter.Spielfeld.OnMap(X, Y) Then
            If Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
                KEModus = KEModi.Box
                Dim X1 As Integer = Hauptmenü.MainMenü.MalPanel.Width / 2 - 150
                Dim Y1 As Integer = Hauptmenü.MainMenü.MalPanel.Height / 2 - 72
                Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                If E.MunitionMax > 0 Then
                    Box = New ObjektBox(ObjektBox.Zustände.NurBefehle, New ObjektButton() {New ObjektButton(X1 + 10, Y1 + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Einheit verändern", New PointF(0.5#, 0.5#)), New ObjektButton(X1 + 180, Y1 + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Abbrechen!", New PointF(0.5#, 0.5#))}, New ObjektNumericUpDown() {New ObjektNumericUpDown(E.Spieler, 1, Objektverwalter.Spielfeld.Spieler.Length - 1, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 30), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(E.getKP, 1, 10, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 50), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(E.Munition, 0, E.MunitionMax, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 70), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(E.Treibstoff, 0, E.SpritMax, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 90), 1, New PointF(0.5#, 0.5#))}, New ObjektStringUpDown() {New ObjektStringUpDown(E.EinheitenStufe, New String() {"Soldat", "Leutnant", "Offizier", "General", "Veteran", "KO"}, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 180, Y1 + 25), New PointF(0.5#, 0.5#))}, New ObjektLabel() {New ObjektLabel(X1 + 15, Y1 + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Spieler:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 50, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Leben:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 70, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Munition:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 90, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Treibstoff:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 130, Y1 + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Rang:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 25, Y1 + 10, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {E.Einheitenname + " X: " + E.X.ToString + " Y: " + E.Y.ToString}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#))}, New Rectangle(X1, Y1, 300, 145), 0)
                Else
                    Box = New ObjektBox(ObjektBox.Zustände.NurBefehle, New ObjektButton() {New ObjektButton(X1 + 10, Y1 + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Einheit verändern", New PointF(0.5#, 0.5#)), New ObjektButton(X1 + 180, Y1 + 115, My.Settings.Resourcenpfad + "Objekte\Button.png", "Abbrechen!", New PointF(0.5#, 0.5#))}, New ObjektNumericUpDown() {New ObjektNumericUpDown(E.Spieler, 1, Objektverwalter.Spielfeld.Spieler.Length - 1, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 30), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(E.getKP, 1, 10, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 50), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(-1, -1, -1, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 70), 1, New PointF(0.5#, 0.5#)), New ObjektNumericUpDown(E.Treibstoff, 0, E.SpritMax, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 80, Y1 + 90), 1, New PointF(0.5#, 0.5#))}, New ObjektStringUpDown() {New ObjektStringUpDown(E.EinheitenStufe, New String() {"Soldat", "Leutnant", "Offizier", "General", "Veteran", "KO"}, My.Settings.Resourcenpfad + "Objekte\NUD.png", New Point(X1 + 180, Y1 + 25), New PointF(0.5#, 0.5#))}, New ObjektLabel() {New ObjektLabel(X1 + 15, Y1 + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Spieler:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 50, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Leben:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 70, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Munition:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 15, Y1 + 90, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Treibstoff:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 130, Y1 + 30, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {"Rang:"}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#)), New ObjektLabel(X1 + 25, Y1 + 10, My.Settings.Resourcenpfad + "Objekte\Transparent.png", New String() {E.Einheitenname + " X: " + E.X.ToString + " Y: " + E.Y.ToString}, New Point(0, 0), 10, 0, New PointF(0.5#, 0.5#))}, New Rectangle(X1, Y1, 300, 145), 0)
                End If

            End If
        End If
    End Sub
    Public Sub EinheitVerändern()
        Dim S() As String = Box.Labels(Box.Labels.Length - 1).Text.Text(0).Split(" ")
        Dim X As Integer = CInt(S(2))
        Dim Y As Integer = CInt(S(4))
        If Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
            If Box.NUDS(2).GetValue < 0 Then
                Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = ObjektLadeklasse.NewEinheit(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).EinheitenID, Box.NUDS(1).GetValue * 10, Box.NUDS(3).GetValue, 0, Box.NUDS(0).GetValue, False, X, Y, False, False)
            Else
                Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = ObjektLadeklasse.NewEinheit(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).EinheitenID, Box.NUDS(1).GetValue * 10, Box.NUDS(3).GetValue, Box.NUDS(2).GetValue, Box.NUDS(0).GetValue, False, X, Y, False, False)
            End If
            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).TruppenStufe = [Enum].Parse(ObjektEinheit.Stufe.General.GetType, Box.SUDS(0).GetValue)
            Dim Spieler As Integer = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Spieler
            If Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).TruppenStufe = ObjektEinheit.Stufe.KO Then
                For Each E In Objektverwalter.Spielfeld.Einheiten
                    If Not E Is Nothing Then
                        If E.X = X And E.Y = Y And E.GetMap = Objektverwalter.Spielfeld.MomentaneSchlacht Then
                        Else
                            If E.EinheitenStufe = ObjektEinheit.Stufe.KO Then
                                If E.Spieler = Box.NUDS(0).GetValue Then
                                    E.TruppenStufe = ObjektEinheit.Stufe.Veteran
                                End If
                            End If
                        End If
                    End If
                Next
            End If
        ElseIf Not Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude Is Nothing Then
            ' Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
        End If
        Box = Nothing
        KEModus = KEModi.EinheitenWerteVerändern
    End Sub
    Private Sub SchlachtWechsel()
        Objektverwalter.Spielfeld.SchlachtWechseln()
        'wir müssen noch für die richtige Cursorposition sorgen.
        Dim e As New System.Windows.Forms.MouseEventArgs(MouseButtons.Left, 1, Karteneditor.CursorRechteck(1).X + 1, Karteneditor.CursorRechteck(1).Y + 1, 0)
        Karteneditor.MouseDown(e, Me)
    End Sub

    ''' <summary>
    ''' Diese Sub Importiert eine AWS-Karte des AWS-Map-Editors von Joao Pedro S. Francese
    ''' </summary>
    ''' <param name="File"></param>
    ''' <remarks></remarks>
    Public Shared Sub ImportAWSMap(ByVal File As String)
        Dim Zeichen(0) As Char
        Using Reader As New IO.FileStream(File, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
            'Zuerst mal den Start weglesen brauchen wir nicht!
            For I = 0 To 9
                'Hier steht nur es ist eine AW-Karte
                Reader.ReadByte()
            Next
            Dim Breite As Integer = Reader.ReadByte()
            Dim Höhe As Integer = Reader.ReadByte()
            Dim Spieler As ObjektSpieler() = {}
            'Dauert ohne länger aber die Farben stimmen!  
            'If Not Objektverwalter.Spielfeld Is Nothing Then
            '    Spieler = Objektverwalter.Spielfeld.Spieler
            'End If
            If Spieler.Length < 6 Then
                Dim SpielerZahl As Integer = Spieler.Length
                Array.Resize(Spieler, 6)
                For I = SpielerZahl To 5
                    If I = 0 Then
                        Spieler(0) = New ObjektSpieler(0, Hauptmenü.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)
                    Else
                        Dim Farbe As Color
                        Dim I2 As Integer = I - 1
                        While I2 > Hauptmenü.AlleFarbtabellen.Length - 1
                            I2 -= Hauptmenü.AlleFarbtabellen.Length - 1
                        End While
                        Farbe = Hauptmenü.AlleFarbtabellen(I2)
                        Dim Armee As Armeen = 10
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                            I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
                        End While
                        Armee = I2
                        Dim Team As Objektverwalter.ABC
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                            I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
                        End While
                        Team = I2
                        If I = 1 Then
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                        Else
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                        End If
                    End If
                Next
            ElseIf Spieler.Length > 6 Then
                Array.Resize(Spieler, 6)
            End If
            'Neutrales Team festlegen
            Spieler(0).Team = "q"
            Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Höhe, Spieler, New ObjektRegeln(Spieler.Length - 1, False))
            'eine Zeile weiter
            Reader.ReadByte() 'Hier steht der Terrain style
            Dim FeldBezug1 As Integer = -1
            Dim FeldBezug2 As Integer = -1
            'Jetzt kommen die Landschaften und Gebäude dran
            For X = 0 To Breite - 1
                For Y = 0 To Höhe - 1
                    FeldBezug1 = Reader.ReadByte
                    FeldBezug2 = Reader.ReadByte
                    Select Case FeldBezug1
                        Case 0 'Ebene
                            Select Case FeldBezug2
                                Case 4 'Monolith
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("MONOLITH", 5, X, Y, , Objektverwalter.Spielfeld)
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld)
                            End Select

                        Case 1 'Straße
                            Select Case FeldBezug2
                                Case 4 'Monolith
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRAßE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 2 'Brücke
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BRÜCKE", X, Y, Objektverwalter.Spielfeld)
                        Case 3 'Fluss
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("FLUSS", X, Y, Objektverwalter.Spielfeld)
                                Case Else
                            End Select
                        Case 4 'Festung
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = New GebäudeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 5
                        Case 6
                        Case 7
                        Case 8 'Fliegende Festung auf Ebene
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht) = New ObjektLandschaft("LUFT", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht).Gebäude = New GebäudeFliegendeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 9
                        Case 10
                        Case 11 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 12 'Fliegendee Festung auf See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht) = New ObjektLandschaft("LUFT", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht).Gebäude = New GebäudeFliegendeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 13 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 14 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)

                        Case 16 'Pipeline
                            Select Case FeldBezug2
                                Case 4
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("PIPELINE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 17
                        Case 18
                        Case 19
                        Case 20
                        Case 21
                        Case 23
                        Case 24
                        Case 25
                        Case 26
                        Case 27
                        Case 28
                        Case 29

                        Case 30 'Riff
                            Select Case FeldBezug2
                                Case 4
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("RIFF", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 31 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 32 'See
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BRÜCKE", X, Y, Objektverwalter.Spielfeld)
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 33 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 34 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 39 'Strand
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRAND", X, Y, Objektverwalter.Spielfeld)
                        Case 44 'HQ OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("HQ", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 45 'Stadt OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 46 'Basis OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 47 'Flughafen OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 48 'Hafen OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 49 'Turm OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 50 'Labor OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 54 'HQ BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("HQ", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 55 'Stadt BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 56 'Basis BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 57 'Flughafen BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 58 'Hafen BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 59 'Turm BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 60 'See oder Labor BM
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                                Case 1
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 2, X, Y, , Objektverwalter.Spielfeld))
                            End Select


                        Case 64 'HQ GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("HQ", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 65 'Stadt GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 66 'Basis GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 67 'Flughafen GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 68 'Hafen GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 69 'Turm GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 70 'Labor GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 74 'HQ YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("HQ", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 75 'Stadt YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 76 'Basis YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 77 'Flughafen YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 78 'Hafen YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 79 'Turm YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 80 'Labor YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 84 'HQ BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("HQ", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 85 'Stadt BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 86 'Basis BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 87 'Flughafen BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 88 'Hafen BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 89 'Turm BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 90 'Wald oder Labor BH

                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("WALD", X, Y, Objektverwalter.Spielfeld)
                                Case 1
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 5, X, Y, , Objektverwalter.Spielfeld))
                            End Select
                        Case 94 'Raketensilo Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("RAKETENSILO+RAKETE", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 95 'Stadt Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("STADT", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 96 'Basis Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("BASIS", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 97 'Flughafen Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("FLUGHAFEN", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 98 'Hafen Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("WERFT", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 99 'Turm Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("TURM", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 100 'Labor Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LABOR", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 132
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("MINIGESCHÜTZ+N", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 133 'Minigeschütze West
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("MINIGESCHÜTZ+W", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 134 'Laser
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("LASER", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 139
                        Case 140
                        Case 141
                        Case 142
                        Case 143
                        Case 144
                        Case 145
                        Case 146
                        Case 150 'Berg
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BERG", X, Y, Objektverwalter.Spielfeld)
                        Case 152 'Minigeschütz Ost
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("MINIGESCHÜTZ+O", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 153 'Minigeschütz Süd
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("MINIGESCHÜTZ+S", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 155 'Kristall
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebäude("KRISTALL", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 159
                        Case 160
                        Case 161
                        Case 162
                        Case 163
                        Case 164
                        Case 165
                        Case 166
                        Case 167 'Ebene mit Schrott
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE+SCHROTT", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 172
                        Case 173
                        Case 174
                        Case 175 'Wäre Schwarzes Geschütz
                        Case 176 'Wäre Schwarzes Geschütz
                        Case 177 'Wäre Schwarzes Geschütz
                        Case 179
                        Case 180 'Vulkan
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("VULKAN", 0, X, Y, , Objektverwalter.Spielfeld)
                        Case 181
                        Case 182
                        Case 183
                        Case 184
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("OMEGARAKETE", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 185
                        Case 186
                        Case 192
                        Case 193 'Schwarze Geschütz nach Süden
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("SCHWARZE GESCHÜTZ+S", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 194
                        Case 195 'Wäre Schwarzes Geschütz
                        Case 196 'Schwarze Geschütz nach Norden
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("SCHWARZE GESCHÜTZ+N", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 197 'Wäre Schwarzes Geschütz
                        Case 199
                        Case 200
                        Case 201
                        Case 202
                        Case 203
                        Case 204
                        Case 205
                        Case 206
                        Case 212
                        Case 213
                        Case 214
                        Case 215 'Wäre Schwarzes Geschütz
                        Case 216 'Wäre Schwarzes Geschütz
                        Case 217 'Wäre Schwarzes Geschütz
                        Case 219
                        Case 220
                        Case 221
                        Case 222
                        Case 223
                        Case 224
                        Case 225
                        Case 226 'Schweißnaht
                            Select Case FeldBezug2
                                Case 3
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SCHWEIßNAHT", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 227 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 228 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 229 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 230 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 232
                        Case 233
                        Case 234
                        Case 235
                        Case 236
                        Case 237
                        Case 239
                        Case 240
                        Case 241
                        Case 242
                        Case 243
                        Case 244
                        Case 245
                        Case 246
                        Case 247 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 248 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 249 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 250 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 252
                        Case 253 'Schocklaser
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude = ObjektLadeklasse.NewGebäude("SCHOCKLASER+S", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 254
                        Case 255
                    End Select
                Next
            Next
            'Die Einheiten erschaffen
            For X = 0 To Breite - 1
                For Y = 0 To Höhe - 1
                    FeldBezug1 = Reader.ReadByte
                    FeldBezug2 = Reader.ReadByte
                    If FeldBezug2 = 255 And FeldBezug1 = 255 Then Continue For
                    Select Case FeldBezug1
                        'Orange Star
                        Case 244 'Infanterie OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(1, X, Y, False)
                        Case 245 'Kampfpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(1, X, Y, False)
                        Case 246 'Späher OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpäher(1, X, Y, False)
                        Case 247 'Artillerie OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(1, X, Y, False)
                        Case 248 'Flak OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(1, X, Y, False)
                        Case 249 'Jäger OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJäger(1, X, Y, False)
                        Case 250 'K-Heli OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(1, X, Y, False)
                        Case 251 'Inf OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(1, X, Y, False)
                        Case 252 'Landeboot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(1, X, Y, False)
                        Case 253 'Titanpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(1, X, Y, False)
                        Case 254 'Megapanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(1, X, Y, False)
                        Case 255 'Läufer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLäufer(1, X, Y, False)
                        Case 0 'Höllium OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHöllium(1, X, Y, False)
                        Case 8 'Mech OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(1, X, Y, False)
                        Case 9 'Jagdpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(1, X, Y, False)
                        Case 10 'TTP OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(1, X, Y, False)
                        Case 11 'Raketenwerfer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(1, X, Y, False)
                        Case 12 'Missile OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(1, X, Y, False)
                        Case 13 'Bomber OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(1, X, Y, False)
                        Case 14 'T-Heli OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(1, X, Y, False)
                        Case 15 'Kreuzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(1, X, Y, False)
                        Case 16 'U-Boot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(1, X, Y, False)
                        Case 17 'Schwarze Boot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(1, X, Y, False)
                        Case 18 'Flugzeugträger OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugträger(1, X, Y, False)
                        Case 19 'Tarnkappenbomber OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(1, X, Y, False)
                        Case 20 'Schwarze Bombe OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(1, X, Y, False)

                            'Blue Moon
                        Case 28 'Infanterie BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(2, X, Y, False)
                        Case 29 'Kampfpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(2, X, Y, False)
                        Case 30 'Späher BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpäher(2, X, Y, False)
                        Case 31 'Artillerie BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(2, X, Y, False)
                        Case 32 'Flak BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(2, X, Y, False)
                        Case 33 'Jäger BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJäger(2, X, Y, False)
                        Case 34 'K-Heli BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(2, X, Y, False)
                        Case 35 'Inf BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(2, X, Y, False)
                        Case 36 'Landeboot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(2, X, Y, False)
                        Case 37 'Titanpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(2, X, Y, False)
                        Case 38 'Megapanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(2, X, Y, False)
                        Case 39 'Läufer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLäufer(2, X, Y, False)
                        Case 40 'Höllium BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHöllium(2, X, Y, False)
                        Case 48 'Mech BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(2, X, Y, False)
                        Case 49 'Jagdpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(2, X, Y, False)
                        Case 50 'TTP BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(2, X, Y, False)
                        Case 51 'Raketenwerfer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(2, X, Y, False)
                        Case 52 'Missile BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(2, X, Y, False)
                        Case 53 'Bomber BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(2, X, Y, False)
                        Case 54 'T-Heli BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(2, X, Y, False)
                        Case 55 'Kreuzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(2, X, Y, False)
                        Case 56 'U-Boot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(2, X, Y, False)
                        Case 57 'Schwarze Boot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(2, X, Y, False)
                        Case 58 'Flugzeugträger BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugträger(2, X, Y, False)
                        Case 59 'Tarnkappenbomber BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(2, X, Y, False)
                        Case 60 'Schwarze Bombe BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(2, X, Y, False)

                            'Green Earth
                        Case 68 'Infanterie GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(3, X, Y, False)
                        Case 69 'Kampfpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(3, X, Y, False)
                        Case 70 'Späher GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpäher(3, X, Y, False)
                        Case 71 'Artillerie GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(3, X, Y, False)
                        Case 72 'Flak GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(3, X, Y, False)
                        Case 73 'Jäger GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJäger(3, X, Y, False)
                        Case 74 'K-Heli GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(3, X, Y, False)
                        Case 75 'Inf GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(3, X, Y, False)
                        Case 76 'Landeboot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(3, X, Y, False)
                        Case 77 'Titanpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(3, X, Y, False)
                        Case 78 'Megapanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(3, X, Y, False)
                        Case 79 'Läufer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLäufer(3, X, Y, False)
                        Case 80 'Höllium GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHöllium(3, X, Y, False)
                        Case 88 'Mech GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(3, X, Y, False)
                        Case 89 'Jagdpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(3, X, Y, False)
                        Case 90 'TTP GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(3, X, Y, False)
                        Case 91 'Raketenwerfer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(3, X, Y, False)
                        Case 92 'Missile GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(3, X, Y, False)
                        Case 93 'Bomber GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(3, X, Y, False)
                        Case 94 'T-Heli GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(3, X, Y, False)
                        Case 95 'Kreuzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(3, X, Y, False)
                        Case 96 'U-Boot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(3, X, Y, False)
                        Case 97 'Schwarze Boot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(3, X, Y, False)
                        Case 98 'Flugzeugträger GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugträger(3, X, Y, False)
                        Case 99 'Tarnkappenbomber GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(3, X, Y, False)
                        Case 100 'Schwarze Bombe GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(3, X, Y, False)

                            'Yellow Comet
                        Case 108 'Infanterie YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(4, X, Y, False)
                        Case 109 'Kampfpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(4, X, Y, False)
                        Case 110 'Späher YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpäher(4, X, Y, False)
                        Case 111 'Artillerie YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(4, X, Y, False)
                        Case 112 'Flak YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(4, X, Y, False)
                        Case 113 'Jäger YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJäger(4, X, Y, False)
                        Case 114 'K-Heli YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(4, X, Y, False)
                        Case 115 'Inf YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(4, X, Y, False)
                        Case 116 'Landeboot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(4, X, Y, False)
                        Case 117 'Titanpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(4, X, Y, False)
                        Case 118 'Megapanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(4, X, Y, False)
                        Case 119 'Läufer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLäufer(4, X, Y, False)
                        Case 120 'Höllium YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHöllium(4, X, Y, False)
                        Case 128 'Mech YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(4, X, Y, False)
                        Case 129 'Jagdpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(4, X, Y, False)
                        Case 130 'TTP YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(4, X, Y, False)
                        Case 131 'Raketenwerfer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(4, X, Y, False)
                        Case 132 'Missile YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(4, X, Y, False)
                        Case 133 'Bomber YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(4, X, Y, False)
                        Case 134 'T-Heli YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(4, X, Y, False)
                        Case 135 'Kreuzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(4, X, Y, False)
                        Case 136 'U-Boot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(4, X, Y, False)
                        Case 137 'Schwarze Boot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(4, X, Y, False)
                        Case 138 'Flugzeugträger YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugträger(4, X, Y, False)
                        Case 139 'Tarnkappenbomber YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(4, X, Y, False)
                        Case 140 'Schwarze Bombe YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(4, X, Y, False)
                            'Black Hole
                        Case 148 'Infanterie BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(5, X, Y, False)
                        Case 149 'Kampfpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(5, X, Y, False)
                        Case 150 'Späher BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpäher(5, X, Y, False)
                        Case 151 'Artillerie BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(5, X, Y, False)
                        Case 152 'Flak BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(5, X, Y, False)
                        Case 153 'Jäger BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJäger(5, X, Y, False)
                        Case 154 'K-Heli BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(5, X, Y, False)
                        Case 155 'Inf BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(5, X, Y, False)
                        Case 156 'Landeboot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(5, X, Y, False)
                        Case 157 'Titanpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(5, X, Y, False)
                        Case 158 'Megapanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(5, X, Y, False)
                        Case 159 'Läufer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLäufer(5, X, Y, False)
                        Case 160 'Höllium BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHöllium(5, X, Y, False)
                        Case 168 'Mech BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(5, X, Y, False)
                        Case 169 'Jagdpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(5, X, Y, False)
                        Case 170 'TTP BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(5, X, Y, False)
                        Case 171 'Raketenwerfer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(5, X, Y, False)
                        Case 172 'Missile BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(5, X, Y, False)
                        Case 173 'Bomber BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(5, X, Y, False)
                        Case 174 'T-Heli BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(5, X, Y, False)
                        Case 175 'Kreuzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(5, X, Y, False)
                        Case 176 'U-Boot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(5, X, Y, False)
                        Case 177 'Schwarze Boot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(5, X, Y, False)
                        Case 178 'Flugzeugträger BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugträger(5, X, Y, False)
                        Case 179 'Tarnkappenbomber BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(5, X, Y, False)
                        Case 180 'Schwarze Bombe BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(5, X, Y, False)
                    End Select
                Next
            Next
            'Jetzt kommen wir Bytes die sagen Ende der Karte
            Dim Kartennamenlänge As Integer = Reader.ReadByte
            For I = 0 To 2
                Reader.ReadByte()
            Next
            'Jetzt kommt der Karten Name
            Dim StringReader As New IO.StreamReader(Reader, System.Text.Encoding.Default)
            Dim Kartenname As String = ""
            For I = 0 To Kartennamenlänge - 1
                StringReader.Read(Zeichen, 0, 1)
                Kartenname += Zeichen(0)
            Next
            'Jetzt kommt vier Zeichen nichts
            Kartennamenlänge = StringReader.Read
            For I = 0 To 2
                StringReader.Read()
            Next
            Dim Autor As String = ""
            For I = 0 To Kartennamenlänge - 1
                StringReader.Read(Zeichen, 0, 1)
                Autor += Zeichen(0)
            Next
            'Jetzt kommt vier Zeichen nichts
            For I = 0 To 3
                StringReader.Read()
            Next
            Dim Beschreibung As String = ""
            Beschreibung = StringReader.ReadToEnd
            Objektverwalter.Spielfeld.Autor = Autor
            Objektverwalter.Spielfeld.Kartenname = Kartenname
            Objektverwalter.Spielfeld.Beschreibung = Beschreibung
        End Using
        OptimizePlayerNumber()
    End Sub
    ''' <summary>
    ''' Gibt die Spieler zurück die Einheiten, Gebäude auf der Karte haben.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function CheckExistingPlayers() As Boolean()
        Dim Player(Objektverwalter.Spielfeld.Spieler.Length - 1) As Boolean
        Dim Schlacht As Integer = 0
        If Objektverwalter.Spielfeld.Regeln.Luftschlacht Then Schlacht = 1
        For I = 0 To Schlacht
            For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                For Y = 0 To Objektverwalter.Spielfeld.Höhe - 1
                    Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(X, Y, I).Gebäude
                    If Not G Is Nothing Then
                        Player(G.Spieler) = True
                    End If
                    Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, I)
                    If Not E Is Nothing Then
                        Player(E.Spieler) = True
                    End If
                Next
            Next
        Next
        Return Player
    End Function
    ''' <summary>
    ''' Löscht alle Spieler, die keine Einheiten oder Gebäude auf dem Spielfeld haben
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub OptimizePlayerNumber()
        'Variablen erstellen
        Dim Player As Boolean() = CheckExistingPlayers()
        Dim Schlacht As Integer = 0
        If Objektverwalter.Spielfeld.Regeln.Luftschlacht Then Schlacht = 1
        Dim Löschen As Integer = 0
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                Löschen += 1
            End If
        Next
        'Spieler löschen
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                'Dieser Spieler existiert nicht also wird er gelöscht
                Dim NächsterMitSpieler As Integer = I + 1
                If NächsterMitSpieler < Player.Length Then
                    While Player(NächsterMitSpieler) = False
                        NächsterMitSpieler += 1
                        If NächsterMitSpieler >= Player.Length Then
                            Exit For 'Wir sind zu weit ab nach unten
                        End If
                    End While
                    'Spieler überschreiben und löschen
                    Objektverwalter.Spielfeld.Spieler(I) = Objektverwalter.Spielfeld.Spieler(NächsterMitSpieler)
                    Objektverwalter.Spielfeld.Spieler(I).Spieler = I
                    For I2 = 0 To Schlacht
                        For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                            For Y = 0 To Objektverwalter.Spielfeld.Höhe - 1
                                Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(X, Y, I2).Gebäude
                                If Not G Is Nothing Then
                                    If G.Spieler = NächsterMitSpieler Then
                                        G.Spieler = I
                                    End If
                                End If
                                Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, I2)
                                If Not E Is Nothing Then
                                    If E.Spieler = NächsterMitSpieler Then
                                        E.Spieler = I
                                    End If
                                End If
                            Next
                        Next
                    Next
                    'Noch zu löschende Spieler senken
                    Player(NächsterMitSpieler) = False
                End If
            End If
        Next  'Hier springen wir hin wenn wir oben am Ende sind
        Array.Resize(Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Spieler.Length - Löschen)
        If Hauptmenü.Formmodus = Hauptmenü.Formmodi.Editor Then
            Dim K As ObjektKarteneditormenü = Objektverwalter.Menü
            K.ChangeSpielerAuswahl(0)
        End If

    End Sub

    Public Overrides Sub ChangeWindowSize(ByVal PosChange As System.Drawing.Point)
        MyBase.ChangeWindowSizeObjekte(PosChange)
        Taskleiste.ChangeWindowSize(PosChange)
        Karteneditor.ChangeWindowSize(PosChange)
    End Sub

    Private Class ChangeTileSetDirection
        Dim ButtonPlatz As Integer = Hauptmenü.Feldbreite + 4
        Dim Landschaft As ObjektLandschaft
        Dim NeueID As Integer = -1
        Dim NeueÜbergangsIDs() As Integer = {}
        Dim LandschaftenInDerBreite As Integer
        Dim LandschaftenInDerHöhe As Integer
        Dim Rechteck As Rectangle
        Dim Buttons(1) As ObjektButton
        Dim ÜsIDs As New Stack(Of String)
        Dim CheckBoxen As New Stack(Of ObjektCheckBox)
        Public Sub New(ByVal Landschaft As ObjektLandschaft)
            Me.Landschaft = Landschaft
            Dim R As Integer
            Rechteck = New Rectangle(Hauptmenü.Rechteck.Width / 4, Hauptmenü.Rechteck.Height / 4, 0, 0)
            LandschaftenInDerBreite = Math.DivRem(CInt(Hauptmenü.Rechteck.Width / 2), ButtonPlatz, R)
            Dim LZahl As Integer = Objektverwalter.LandschaftenBilder(Me.Landschaft.ID).Texturen.Length + 1
            LandschaftenInDerHöhe = Math.DivRem(LZahl, LandschaftenInDerBreite, R)
            If R > 0 Then LandschaftenInDerHöhe += 1
            Rechteck.Width = LandschaftenInDerBreite * ButtonPlatz + 30
            '30 Für die beiden Buttons!
            If Objektverwalter.LandschaftenBilder(Landschaft.ID).Übergänge.Length > 0 Then
                If Objektverwalter.LandschaftenBilder(Landschaft.ID).ÜbergangsModus = ObjektLandschaftsTextur.Übergangsmodi.Strand Then
                    Rechteck.Height = ButtonPlatz * LandschaftenInDerHöhe + 30 + 100
                    Dim Üs() As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Übergangfunktion
                    If Üs.Contains("NW") Then
                        ÜsIDs.Push("NW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("NO") Then
                        ÜsIDs.Push("NO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("ON") Then
                        ÜsIDs.Push("ON")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 - ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("OS") Then
                        ÜsIDs.Push("OS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 + ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("SO") Then
                        ÜsIDs.Push("SO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))

                    End If
                    If Üs.Contains("SW") Then
                        ÜsIDs.Push("SW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("WN") Then
                        ÜsIDs.Push("WN")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 - ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("WS") Then
                        ÜsIDs.Push("WS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 + ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                Else
                    Rechteck.Height = ButtonPlatz * LandschaftenInDerHöhe + 30 + 100
                    Dim Üs() As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Übergangfunktion
                    If Üs.Contains("N") Then
                        ÜsIDs.Push("N")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("S") Then
                        ÜsIDs.Push("S")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("O") Then
                        ÜsIDs.Push("O")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("W") Then
                        ÜsIDs.Push("W")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("NW") Then
                        ÜsIDs.Push("NW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("NO") Then
                        ÜsIDs.Push("NO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("OS") Then
                        ÜsIDs.Push("OS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Üs.Contains("SW") Then
                        ÜsIDs.Push("SW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                End If
            Else
                Rechteck.Height = ButtonPlatz * LandschaftenInDerHöhe + 100
            End If

            Dim B As Image = Image.FromFile(My.Settings.Resourcenpfad + "Objekte\Button.png")
            Buttons(0) = New ObjektButton(Rechteck.X + 10, Rechteck.Y + Rechteck.Height - 30, B, "Ändern", "Button", New PointF(0.5#, 0.5#))
            Buttons(1) = New ObjektButton(Rechteck.X + Rechteck.Width - 120, Rechteck.Y + Rechteck.Height - 30, B, "Abbrechen!", "Button", New PointF(0.5#, 0.5#))
            'Werte holen
            NeueID = Landschaft.BildID
            Dim ÜIDSString() As String = ÜsIDs.ToArray
            For I = 0 To Landschaft.ÜbergangsIDS.Length - 1
                Dim A As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Übergangfunktion((Landschaft.ÜbergangsIDS(I)))
                CheckBoxen(Array.IndexOf(ÜIDSString, A)).Checked = True
            Next
        End Sub
        ''' <summary>
        ''' Erstellt die Landschaft Neu!
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub CreateChanges()
            If NeueID < 0 Then
                Landschaft.BildIDFest = False
                Landschaft.ÜbergängeAktualisieren(Landschaft.KooX, Landschaft.KooY, Objektverwalter.Spielfeld)
            Else
                Landschaft.BildIDFest = True
                Landschaft.BildID = NeueID
                Landschaft.ÜbergangsIDS = NeueÜbergangsIDs
            End If
        End Sub
        ''' <summary>
        ''' Wir malen mal diesen Punkt! 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub Malen()
            Dim sngrotation As Single = 0
            Dim intcolor As Color = Color.FromArgb(180, 255, 255, 255)
            Grafikengine.DrawBox(TexturenHalter.GetBoxHintergrund(0), Rechteck.Location, New Size(144, 145), Rechteck.Size, 5, intcolor)
            'So die Box steht jetzt die Tilesets
            Dim LTexturen As Texture() = Objektverwalter.LandschaftenBilder(Landschaft.ID).Texturen
            Grafikengine.ptfPosition = Rechteck.Location + New Point(10, 10)
            Grafikengine.recBild = Nothing
            Grafikengine.ptfRotCenter = Nothing
            Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite, Hauptmenü.Feldbreite)
            For Y = 0 To LandschaftenInDerHöhe - 1
                For X = 0 To LandschaftenInDerBreite - 1
                    Dim Stelle As Integer = X + Y * LandschaftenInDerBreite
                    If Stelle < LTexturen.Length Then
                        If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                            Grafikengine.recBild.X = 0
                            Grafikengine.recBild.Y = 0
                            Grafikengine.recBild.Width = Hauptmenü.Feldbreite
                            Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                        Else
                            Grafikengine.recBild = Nothing
                        End If
                        If Landschaft.Groß Then
                            Grafikengine.recBild.X = 0
                            Grafikengine.recBild.Y = 0
                            Grafikengine.recBild.Width = Hauptmenü.Feldbreite
                            Grafikengine.recBild.Height = Hauptmenü.Feldbreite * 2
                            Grafikengine.ptfPosition.Y -= Hauptmenü.Feldbreite
                            Grafikengine.szfScale.Height = Hauptmenü.Feldbreite * 2
                            Grafikengine.Sprite.Draw2D(LTexturen(Stelle), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                            If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                                Grafikengine.recBild.X = 0
                                Grafikengine.recBild.Y = 0
                                Grafikengine.recBild.Width = Hauptmenü.Feldbreite
                                Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                            Else
                                Grafikengine.recBild = Nothing
                            End If
                            Grafikengine.szfScale.Height = Hauptmenü.Feldbreite
                            Grafikengine.ptfPosition.Y += Hauptmenü.Feldbreite
                        Else
                            Grafikengine.Sprite.Draw2D(LTexturen(Stelle), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If



                        If Stelle = NeueID Then
                            Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite, Hauptmenü.Feldbreite)
                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetDropDownItemTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If
                    Else
                        Grafikengine.recBild = New Rectangle(18, 0, 18, 18)
                        Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite, Hauptmenü.Feldbreite)
                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetKreuzHakenTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        If NeueID < 0 Then
                            Grafikengine.recBild = Nothing

                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetDropDownItemTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If
                        Exit For
                    End If
                    Grafikengine.ptfPosition.X += ButtonPlatz
                Next
                Grafikengine.ptfPosition.Y += ButtonPlatz
                Grafikengine.ptfPosition.X = Rechteck.X + 10
            Next
            If NeueID >= 0 Then
                If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                    Grafikengine.recBild.X = 0
                    Grafikengine.recBild.Y = 0
                    Grafikengine.recBild.Width = Hauptmenü.Feldbreite
                    Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                Else
                    Grafikengine.recBild = Nothing
                End If
                Grafikengine.ptfPosition.X = Rechteck.X + Rechteck.Width / 2 - Hauptmenü.Feldbreite / 2
                Grafikengine.ptfPosition.Y = Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - Hauptmenü.Feldbreite / 2
                Grafikengine.Sprite.Draw2D(LTexturen(NeueID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).Malen()
                Next
            End If
            For I = 0 To Buttons.Length - 1
                Buttons(I).Malen()
            Next
        End Sub
        Public Sub MouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
            For I = 0 To Buttons.Length - 1
                Buttons(I).MouseEnter(e.X, e.Y)
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseEnter(e.X, e.Y)
                Next
            End If
        End Sub
        Public Sub MouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
            For I = 0 To Buttons.Length - 1
                Buttons(I).MouseDown(e.X, e.Y)
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseDown(e.X, e.Y)
                Next
            End If
            'Haben wir auf ein Landschaftsfeld geklickt?
            Dim R As Rectangle = New Rectangle(Rechteck.X + 10, Rechteck.Y + 10, Hauptmenü.Feldbreite, Hauptmenü.Feldbreite)
            Dim LIDZahl As Integer = Objektverwalter.LandschaftenBilder(Landschaft.ID).Texturen.Length
            For Y = 0 To LandschaftenInDerHöhe - 1
                For X = 0 To LandschaftenInDerBreite - 1
                    Dim Stelle As Integer = X + Y * LandschaftenInDerBreite
                    If Stelle < LIDZahl Then
                        If R.Contains(e.Location) Then
                            NeueID = Stelle
                            Exit Sub
                        End If
                    Else
                        If R.Contains(e.Location) Then
                            NeueID = -1
                        End If
                        Exit Sub
                    End If
                    R.X += ButtonPlatz
                Next
                R.Y += ButtonPlatz
                R.X = Rechteck.X + 10
            Next

        End Sub
        Public Function MouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) As String
            Dim F As String = ""
            For I = 0 To Buttons.Length - 1
                F = Buttons(I).MouseUp(e.X, e.Y)
                If F.ToLower = "ändern" Then
                    CreateÜIDs()
                End If
                If F <> "" Then Return F
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseUp(e.X, e.Y)
                Next
            End If
            Return F
        End Function
        Private Sub CreateÜIDs()
            Dim NeuÜIDs As New Stack(Of Integer)
            Dim ÜIds As String() = Objektverwalter.LandschaftenBilder(Landschaft.ID).Übergangfunktion
            For I = 0 To CheckBoxen.Count - 1
                If CheckBoxen(I).Checked = True Then
                    NeuÜIDs.Push(Array.IndexOf(ÜIds, ÜsIDs(I)))
                End If
            Next
            NeueÜbergangsIDs = NeuÜIDs.ToArray
        End Sub
    End Class
    ''' <summary>
    ''' Checks if all Player have a Building or Unit.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function IsMapPlayable() As Boolean
        Dim Player As Boolean() = CheckExistingPlayers()
        Dim NichtExistent As Integer = 0
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                Return False
            End If
        Next
        Return True
    End Function
    Private Sub CheckMap()
        If Not IsMapPlayable() Then
            Cursor.Show()
            If MsgBox("This Map contains to much players! Do you want to delete all superfical players?", MsgBoxStyle.YesNo, "Player Number") = MsgBoxResult.Yes Then
                OptimizePlayerNumber()
            End If
            Cursor.Hide()
        End If
    End Sub
    Private Sub SaveMap()
        CheckMap()
        Dim Name As String = Hauptmenü.MainMenü.SpeichenUnter.FileName
        If Name.LastIndexOf("\") >= 0 Then
            Name = Name.Remove(0, Name.LastIndexOf("\") + 1)
        End If
        If Name.IndexOf(".") >= 0 Then
            Name = Name.Remove(Name.IndexOf("."))
        End If
        Hauptmenü.Speichern(Name)
    End Sub

    ''' <summary>
    ''' Resets the Fill Mode
    ''' </summary>
    ''' <param name="NewMode"></param>
    ''' <remarks></remarks>
    Private Sub ChangeFillMode(ByVal NewMode As FillModi)
        FillMode = NewMode
        P1 = New Point(-1, -1)
        P2 = New Point(-1, -1)
        Objektverwalter.MarkierteFelder.Clear()
    End Sub
    ''' <summary>
    ''' Füllt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebäude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawRectancle(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            P2.X = P1.X
            P1.X = X
        End If
        If P1.Y > P2.Y Then
            Dim y As Integer = P2.Y
            P2.Y = P1.Y
            P1.Y = y
        End If
        Dim Gebäudeinstanz As ObjektGebäude = Nothing
        Select Case KEModus
            Case KEModi.Gebäudeplazieren
                Gebäudeinstanz = ObjektLadeklasse.NewGebäude(Objektverwalter.AlleGebäude(Objektverwalter.GebäudeTextur.GetGebäudeID(Karteneditor.AktuelleGebäude, Karteneditor.MomenentanerSpieler)).GebäudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        For X = P1.X To P2.X
            For Y = P1.Y To P2.Y
                Select Case KEModus
                    Case KEModi.Einheitplazieren
                        Objektverwalter.Einheitplazieren(X, Y)
                    Case KEModi.Landschaftplazieren
                        Objektverwalter.Landschaftplazieren(X, Y, False)
                    Case KEModi.Gebäudeplazieren
                        Objektverwalter.Gebäudeplazieren(X, Y, Gebäudeinstanz)
                End Select
            Next
        Next
        Objektverwalter.ÜbergängeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Füllt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebäude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawLine(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            Dim Y As Integer = P2.Y
            P2.X = P1.X
            P2.Y = P1.Y
            P1.X = X
            P1.Y = Y
        End If
        Dim Gebäudeinstanz As ObjektGebäude = Nothing
        Select Case KEModus
            Case KEModi.Gebäudeplazieren
                Gebäudeinstanz = ObjektLadeklasse.NewGebäude(Objektverwalter.AlleGebäude(Objektverwalter.GebäudeTextur.GetGebäudeID(Karteneditor.AktuelleGebäude, Karteneditor.MomenentanerSpieler)).GebäudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        If P1.X = P2.X Then
            If P1.Y > P2.Y Then
                Dim y As Integer = P2.Y
                P2.Y = P1.Y
                P1.Y = y
            End If
            For Y = P1.Y To P2.Y
                Select Case KEModus
                    Case KEModi.Einheitplazieren
                        Objektverwalter.Einheitplazieren(P1.X, Y)
                    Case KEModi.Landschaftplazieren
                        Objektverwalter.Landschaftplazieren(P1.X, Y, False)
                    Case KEModi.Gebäudeplazieren
                        Objektverwalter.Gebäudeplazieren(P1.X, Y, Gebäudeinstanz)
                End Select
            Next
        Else
            Dim LastLineY As Integer = -1
            For X = P1.X To P2.X
                Dim M As Double = (P1.Y - P2.Y) / (P1.X - P2.X)
                If M > 1 Or M < -1 Then
                    Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                    Select Case KEModus
                        Case KEModi.Einheitplazieren
                            Objektverwalter.Einheitplazieren(X, Y)
                        Case KEModi.Landschaftplazieren
                            Objektverwalter.Landschaftplazieren(X, Y, False)
                        Case KEModi.Gebäudeplazieren
                            Objektverwalter.Gebäudeplazieren(X, Y, Gebäudeinstanz)
                    End Select
                    If LastLineY < 0 Then LastLineY = P1.Y
                    Dim Y1 As Integer = LastLineY
                    If LastLineY < Y Then
                        Y1 = Y
                        Y = LastLineY
                        LastLineY = Y1
                    Else
                        LastLineY = Y
                    End If
                    For Y2 = Y + 1 To Y1 - 1
                        Select Case KEModus
                            Case KEModi.Einheitplazieren
                                Objektverwalter.Einheitplazieren(X, Y2)
                            Case KEModi.Landschaftplazieren
                                Objektverwalter.Landschaftplazieren(X, Y2, False)
                            Case KEModi.Gebäudeplazieren
                                Objektverwalter.Gebäudeplazieren(X, Y2, Gebäudeinstanz)
                        End Select
                    Next
                Else
                    Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                    Select Case KEModus
                        Case KEModi.Einheitplazieren
                            Objektverwalter.Einheitplazieren(X, Y)
                        Case KEModi.Landschaftplazieren
                            Objektverwalter.Landschaftplazieren(X, Y, False)
                        Case KEModi.Gebäudeplazieren
                            Objektverwalter.Gebäudeplazieren(X, Y, Gebäudeinstanz)
                    End Select
                End If
            Next
        End If
        Objektverwalter.ÜbergängeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Füllt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebäude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawEllipse(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            P2.X = P1.X
            P1.X = X
        End If
        If P1.Y > P2.Y Then
            Dim y As Integer = P2.Y
            P2.Y = P1.Y
            P1.Y = y
        End If

        Dim Gebäudeinstanz As ObjektGebäude = Nothing
        Select Case KEModus
            Case KEModi.Gebäudeplazieren
                Gebäudeinstanz = ObjektLadeklasse.NewGebäude(Objektverwalter.AlleGebäude(Objektverwalter.GebäudeTextur.GetGebäudeID(Karteneditor.AktuelleGebäude, Karteneditor.MomenentanerSpieler)).GebäudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        'Große Halbachse
        Dim HGroß As Integer = Math.Abs((P2.X - P1.X) / 2)
        'Kleine Halbachse
        Dim HKlein As Integer = Math.Abs((P2.Y - P1.Y) / 2)
        'mittelpunkt der Brennpunkte...
        Dim MPunkt As New Point(P1.X + HGroß, P1.Y + HKlein)

        For X = 0 To HGroß
            Dim XHilfe As Double = -HGroß + X
            If X = 0 Then XHilfe += 0.5#
            'Der Winkel Alpha (Ritzsche Achsenkonstruktion)
            Dim YMax As Integer = Math.Sqrt(HKlein * HKlein - ((HKlein * HKlein) / (HGroß * HGroß)) * XHilfe * XHilfe)
            For Y = -YMax To YMax
                Select Case KEModus
                    Case KEModi.Einheitplazieren
                        Objektverwalter.Einheitplazieren(P1.X + X, Y + MPunkt.Y)
                        Objektverwalter.Einheitplazieren(P2.X - X, Y + MPunkt.Y)
                    Case KEModi.Landschaftplazieren
                        Objektverwalter.Landschaftplazieren(P1.X + X, Y + MPunkt.Y, False)
                        Objektverwalter.Landschaftplazieren(P2.X - X, Y + MPunkt.Y, False)
                    Case KEModi.Gebäudeplazieren
                        Objektverwalter.Gebäudeplazieren(P1.X + X, Y + MPunkt.Y, Gebäudeinstanz)
                        Objektverwalter.Gebäudeplazieren(P2.X - X, Y + MPunkt.Y, Gebäudeinstanz)
                End Select
            Next
        Next
        Objektverwalter.ÜbergängeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Marks the filled Fields
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub MarkFields(ByVal P1 As Point, ByVal P2 As Point)
        If FillMode > FillModi.None Then
            If P1.X >= 0 Then
                If Objektverwalter.Spielfeld.OnMap(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) Then
                    If Hauptmenü.SpielfeldPunkt <> P2 Then
                        P2 = Hauptmenü.SpielfeldPunkt
                        Objektverwalter.MarkierteFelder.Clear()
                        Select Case FillMode
                            Case FillModi.Rectancle
                                If P1.X > P2.X Then
                                    Dim X As Integer = P2.X
                                    P2.X = P1.X
                                    P1.X = X
                                End If
                                If P1.Y > P2.Y Then
                                    Dim y As Integer = P2.Y
                                    P2.Y = P1.Y
                                    P1.Y = y
                                End If
                                For X = P1.X To P2.X
                                    For Y = P1.Y To P2.Y
                                        Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                    Next
                                Next
                            Case FillModi.Line
                                If P1.X > P2.X Then
                                    Dim X As Integer = P2.X
                                    Dim Y As Integer = P2.Y
                                    P2.X = P1.X
                                    P2.Y = P1.Y
                                    P1.X = X
                                    P1.Y = Y
                                End If
                                If P1.X = P2.X Then
                                    If P1.Y > P2.Y Then
                                        Dim y As Integer = P2.Y
                                        P2.Y = P1.Y
                                        P1.Y = y
                                    End If
                                    For Y = P1.Y To P2.Y
                                        Objektverwalter.neuMarkiertesFeld(P1.X, Y, Color.Red, "Rot")
                                    Next
                                Else
                                    Dim LastLineY As Integer = -1
                                    For X = P1.X To P2.X
                                        Dim M As Double = (P1.Y - P2.Y) / (P1.X - P2.X)
                                        If M > 1 Or M < -1.0# Then
                                            If LastLineY < 0 Then LastLineY = P1.Y
                                            Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                                            Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                            Dim Y1 As Integer = LastLineY
                                            If LastLineY < Y Then
                                                Y1 = Y
                                                Y = LastLineY
                                                LastLineY = Y1
                                            Else
                                                LastLineY = Y
                                            End If
                                            For Y2 = Y + 1 To Y1 - 1
                                                Objektverwalter.neuMarkiertesFeld(X, Y2, Color.Red, "Rot")
                                            Next

                                        Else
                                            Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                                            Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                        End If
                                    Next
                                End If
                            Case FillModi.Ellipse
                                If P1 = P2 Then
                                    Objektverwalter.neuMarkiertesFeld(P1.X, P1.Y, Color.Red, "Rot")
                                Else
                                    If P1.X > P2.X Then
                                        Dim X As Integer = P2.X
                                        P2.X = P1.X
                                        P1.X = X
                                    End If
                                    If P1.Y > P2.Y Then
                                        Dim y As Integer = P2.Y
                                        P2.Y = P1.Y
                                        P1.Y = y
                                    End If
                                    'Große Halbachse
                                    Dim HGroß As Integer = Math.Abs((P2.X - P1.X) / 2)
                                    'Kleine Halbachse
                                    Dim HKlein As Integer = Math.Abs((P2.Y - P1.Y) / 2)
                                    'mittelpunkt der Brennpunkte...
                                    Dim MPunkt As New Point(P1.X + HGroß, P1.Y + HKlein)
                                    If HGroß = 0 Then HGroß = 1
                                    For X = 0 To HGroß
                                        Dim XHilfe As Double = -HGroß + X
                                        If X = 0 Then XHilfe += 0.5#
                                        'Der Winkel Alpha (Ritzsche Achsenkonstruktion)
                                        Dim YMax As Integer = Math.Sqrt(Math.Abs(HKlein * HKlein - ((HKlein * HKlein) / (HGroß * HGroß)) * XHilfe * XHilfe))
                                        For Y = -YMax To YMax
                                            Objektverwalter.neuMarkiertesFeld(P1.X + X, Y + MPunkt.Y, Color.Red, "Rot")
                                            Objektverwalter.neuMarkiertesFeld(P2.X - X, Y + MPunkt.Y, Color.Red, "Rot")
                                        Next
                                    Next
                                End If
                        End Select
                    End If
                End If
            End If
        End If
    End Sub
    ''' <summary>
    ''' Fills the Fields
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SetPointAndFill()
        If Objektverwalter.Spielfeld.OnMap(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) Then
            If P1.X >= 0 Then
                P2 = Hauptmenü.SpielfeldPunkt
                Select Case FillMode
                    Case FillModi.Ellipse
                        DrawEllipse(P1, P2)
                    Case FillModi.Line
                        DrawLine(P1, P2)
                    Case FillModi.Rectancle
                        DrawRectancle(P1, P2)
                End Select
                P1 = New Point(-1, -1)
                P2 = New Point(-1, -1)
                Objektverwalter.MarkierteFelder.Clear()
            Else
                P1 = Hauptmenü.SpielfeldPunkt
            End If
        End If
    End Sub
End Class
